package com.lcpay.download.core;

import java.io.IOException;

/**
 * 类AbstractMonitor.java的实现描述：监控类
 * 
 * @author chenrs 2015年12月7日 下午11:33:02
 */
public abstract class AbstractMonitor implements Runnable {

    /**
     * 开关
     */
    private boolean active = false;

    /**
     * 定时执行器
     */
    private Thread  runner;

    @Override
    public void run() {

        // 监控类 线程级别调制最低
        runner.setPriority(Thread.MIN_PRIORITY);
        while (active) {
            // 记录下载点位
            try {
                writeMonitorFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 完成调用删除locked文件
            finishDownload();

            // 每秒一次
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 完成下载操作
     */
    protected abstract void finishDownload();

    /**
     * 写监控文件
     * 
     * @throws IOException
     */
    protected abstract void writeMonitorFile() throws IOException;

    /**
     * 开始监控
     */
    protected void start() {
        active = true;
        runner = new Thread(this);
        runner.start();
    }

    /**
     * 结束监控
     */
    protected void stop() {
        active = false;
    }

}
